a11y: Make lockbutton notify about state changes
authorBenjamin Otte <otte@redhat.com>
Mon, 9 Jul 2012 01:11:01 +0000 (03:11 +0200)
committerBenjamin Otte <otte@redhat.com>
Mon, 9 Jul 2012 01:12:13 +0000 (03:12 +0200)
In particular, ensure that the name of the lockbutton gets updated as
the displayed text of the lockbutton changes.

https://bugzilla.gnome.org/show_bug.cgi?id=677347

gtk/a11y/gtklockbuttonaccessible.c
gtk/a11y/gtklockbuttonaccessible.h
gtk/gtklockbutton.c

index a24e3109b13b00022d90540f9f97c5dea696700c..641cfe33b8dfa3b8432f2d7e05da72fa4c82bab0 100644 (file)
 
 #include "config.h"
 
-#include "gtk/gtklockbuttonprivate.h"
 #include "gtklockbuttonaccessible.h"
 
+#include "gtk/gtklockbuttonprivate.h"
+#include "gtk/gtkwidgetprivate.h"
+
 G_DEFINE_TYPE (GtkLockButtonAccessible, _gtk_lock_button_accessible, GTK_TYPE_BUTTON_ACCESSIBLE)
 
 static const gchar *
@@ -46,3 +48,16 @@ static void
 _gtk_lock_button_accessible_init (GtkLockButtonAccessible *lockbutton)
 {
 }
+
+void
+_gtk_lock_button_accessible_name_changed (GtkLockButton *lockbutton)
+{
+  AtkObject *obj;
+
+  obj = _gtk_widget_peek_accessible (GTK_WIDGET (lockbutton));
+  if (obj == NULL)
+    return;
+
+  g_object_notify (G_OBJECT (obj), "accessible-name");
+}
+
index 21bc93f343d70550b8a78e2bbfc8d0989fb22a92..9430129ac8b4e42e5ddd03683e9bf37574addeb2 100644 (file)
@@ -19,6 +19,7 @@
 #define __GTK_LOCK_BUTTON_ACCESSIBLE_H__
 
 #include "gtkbuttonaccessible.h"
+#include "gtk/gtklockbutton.h"
 
 G_BEGIN_DECLS
 
@@ -44,6 +45,9 @@ struct _GtkLockButtonAccessibleClass
 
 GType _gtk_lock_button_accessible_get_type (void);
 
+void  _gtk_lock_button_accessible_name_changed (GtkLockButton *lockbutton);
+
+
 G_END_DECLS
 
 #endif /* __GTK_LOCK_BUTTON_ACCESSIBLE_H__ */
index 9cb828b843f8f48aebffb10fba50128eaade0c73..6121adef237610d8574aa5f9bde33a94a393898a 100644 (file)
@@ -185,10 +185,12 @@ gtk_lock_button_set_property (GObject      *object,
 
     case PROP_TEXT_LOCK:
       gtk_label_set_text (GTK_LABEL (priv->label_lock), g_value_get_string (value));
+      _gtk_lock_button_accessible_name_changed (button);
       break;
 
     case PROP_TEXT_UNLOCK:
       gtk_label_set_text (GTK_LABEL (priv->label_unlock), g_value_get_string (value));
+      _gtk_lock_button_accessible_name_changed (button);
       break;
 
     case PROP_TOOLTIP_LOCK:
@@ -388,8 +390,12 @@ update_state (GtkLockButton *button)
     }
 
   gtk_image_set_from_gicon (GTK_IMAGE (priv->image), icon, GTK_ICON_SIZE_MENU);
-  gtk_widget_set_visible (priv->label_lock, allowed);
-  gtk_widget_set_visible (priv->label_unlock, !allowed);
+  if (gtk_widget_get_visible (priv->label_lock) != allowed)
+    {
+      gtk_widget_set_visible (priv->label_lock, allowed);
+      gtk_widget_set_visible (priv->label_unlock, !allowed);
+      _gtk_lock_button_accessible_name_changed (button);
+    }
   gtk_widget_set_tooltip_markup (GTK_WIDGET (button), tooltip);
   gtk_widget_set_sensitive (GTK_WIDGET (button), sensitive);
   gtk_widget_set_visible (GTK_WIDGET (button), visible);